#include <stdio.h>

// 数组指针
int main()
{   
    int *p = NULL; //p是整形的指针 - 指向整形的指针 - 存整形的地址
    int *pc = NULL; //pc是字符的指针 - 指向字符的指针 - 存字符的地址

    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    for (int i = 0; i < 10; i++)
    {
        printf("{} = %d \n", *(arr + i)); // arr是数组首元素的地址
    }
    printf("%d \n", *arr);       // arr是数组首元素的地址
    printf("%d \n", *(&arr[0])); // &arr[0]是数组首元素的地址
    for (int i = 0; i < 10; i++) {
        printf("%d \n", (*(&arr))[i]); // arr是数组首元素的地址
    }

    // 数组的指针 ：存的是数组的地址
    int(*parr)[] = &arr;
    for (int i = 0; i < 10; i++)
    {
        (*parr)[i] = 100;
        printf("< %d ", (*parr)[i]);
    }
    printf("\n");
    for (int i = 0; i < 10; i++)
    {
        printf("= %d ", *(*parr + i)); // *parr相当于arr,+i是地址向后移动。然后解引用，获得数组对应位置的值
    }
    printf("\n");

    char a = 'a';
    char *pc_arr[5];
    char *(*pa)[5] = &pc_arr;

    

    return 0;
}
